from numpy import *
def loadDataSetTrain(filename):    #载入训练数据
    dataMat=[]
    labelMat=[]
    fr=open(filename);
    for line in fr.readlines():     #读取文件
        lineArr=line.strip().split('\t')     #去除每一行中的空格
        dataMat.append([1.0,float(lineArr[0]),float(lineArr[1])])
        labelMat.append(int(lineArr[2]))
    return mat(dataMat),mat(labelMat)
 
 
def loadDataSetTest(filename):       #载入测试数据
    dataMat=[]
    fr=open(filename);
    for line in fr.readlines():        #读取文件
        lineArr=line.strip().split('\t')     #去除每一行中的空格
        dataMat.append([1.0,float(lineArr[0]),float(lineArr[1])])
    return dataMat
 
 
def sigmoid(inX):
    return 1.0/(1+exp(-inX))     #使用sigmoid函数
 
 
def logisticRegression(dataMat,labelMat,m,n,k):  #更新权值，k是循环次数
    X=dataMat.T
    Y=labelMat
    theta=mat(ones(n))        #初始化权重矩阵
    for i in range(k):
        theta=theta-0.2/m*(sigmoid(theta*X)-Y)*X.T    #更新公式
    return theta
 
 
def classifyVector(testData,theta):
    prob=sigmoid(theta*testData)
    return prob
 
 
dataMat,labelMat=loadDataSetTrain('E:\\python\\machine_learning\\train.txt')
m,n=shape(dataMat)       #样本数据有m个，加上偏置相有特征值n个
testData=loadDataSetTest('E:\\python\\machine_learning\\test.txt')
testData=mat(testData).T      #测试数据
theta=logisticRegression(dataMat,labelMat,m,n,1000)
x=classifyVector(testData,theta)
xx=x.tolist()
print(xx)